'use strict';

var ip = require('ip');
var browserConfig = require('./browsers');
var browserStack = process.env.BROWSER === 'true';

module.exports = function (config) {
    var conf = {
        basePath: '../',
        frameworks: ['qunit'],
        plugins: ['karma-qunit'],
        // list of files / patterns to load in the browser
        files: [
            'js/tests/vendor/jquery.min.js',
            'js/tooltip.js',
            'js/!(tooltip).js',
            'js/tests/unit/*.js'
        ],
        reporters: ['dots'],
        port: 9876,
        colors: true,
        // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
        logLevel: config.LOG_ERROR || config.LOG_WARN,
        autoWatch: false,
        singleRun: true,
        concurrency: Infinity,
        client: {
            qunit: {
                showUI: true
            }
        }
    };

    if (browserStack) {
        conf.hostname = ip.address();
        conf.browserStack = {
            username: process.env.BROWSER_STACK_USERNAME,
            accessKey: process.env.BROWSER_STACK_ACCESS_KEY,
            build: 'bootstrap-v3-' + new Date().toISOString(),
            project: 'Bootstrap v3',
            retryLimit: 1
        };
        conf.plugins.push('karma-browserstack-launcher');
        conf.customLaunchers = browserConfig.list;
        conf.browsers = browserConfig.keys;
        conf.reporters.push('BrowserStack');
    } else {
        conf.frameworks.push('detectBrowsers');
        conf.plugins.push(
            'karma-chrome-launcher',
            'karma-firefox-launcher',
            'karma-detect-browsers'
        );

        conf.detectBrowsers = {
            usePhantomJS: false,
            postDetection: function (availableBrowser) {
                if (typeof process.env.TRAVIS_JOB_ID !== 'undefined' || availableBrowser.includes('Chrome')) {
                    return ['ChromeHeadless'];
                }

                if (availableBrowser.includes('Firefox')) {
                    return ['FirefoxHeadless'];
                }

                throw new Error('Please install Firefox or Chrome');
            }
        };

        conf.customLaunchers = {
            FirefoxHeadless: {
                base: 'Firefox',
                flags: ['-headless']
            }
        };
    }

    config.set(conf);
};
